public class test2 {
    public static void main(String[] args) {
        int a=10;
        int b=20;
        int c=a+(b-a)>>1;
        System.out.println(c);
//        上述表达式中，由于+的优先级要高于>>，因此a先和b-a的结果做加法，整体为20，最后再进行右移，因此结果
//        为10
//        注意:运算符之间是有优先级的.具体的规则我们不必记忆,在可能存在歧义的代码中加上括号即可

        //求a,b平均值
        int d=a+((b-a)>>1);
        System.out.println(d);
    }
    public static void main16(String[] args) {
        int a=10;
        int b=20;
        int max=a>b?a:b;
        System.out.println(max);
//        条件运算符只有一个:
//        表达式1?表达式2:表达式3
//        当表达式1 的值为 true时,整个表达式的值为表达式2的值;
//        当表达式1的值为 false时,整个表达式的值为表达式3的值.
//        也是Java 中唯一的一个三目运算符,是条件判断语句的简化写法.
//        注意:
//        1.表达式2和表达式3的结果要是同类型的，除非能发生类型隐式类型转换
//        2.表达式不能单独存在，其产生的结果必须要被使用    a>b?a:b;//err
    }
    public static void main15(String[] args) {
        int b=-1;
        byte a=-1;
        System.out.printf("%x\n",b>>>1);
        System.out.println(b>>>1);
        System.out.println(a>>>1);
        //
        //a原来是byte,经过>>>运算符后，类型提升，所以可以变成这么大的数
    }
    public static void main14(String[] args) {
        int a=0x10;
        System.out.printf("x\n",a<<1);
        System.out.println(a<<1);
//        1.左移1位,相当于原数字*2.左移N位,相当于原数字*2 的N次方.
//        3.由于计算机计算移位效率高于计算乘除,当某个代码正好乘除2的N次方的时候可以用移位运算代替.
//        2.右移1位,相当于原数字/2.右移N位,相当于原数字/2 的N次方.
//        4.移动负数位或者移位位数过大都没有意义.
//        5.无论<<或者>>，都不会改变数字的正负
    }
    public static void main13(String[] args) {
        int a=0x1;
        int b=0x2;
        System.out.printf("%x\n",a^b);//按位异或，相同为0，否则为1
    }
    public static void main12(String[] args) {
        int a=10;
        int b=20;
        System.out.println(a&b);
        System.out.println(a|b);
        int c=0xf;
        System.out.printf("%x\n",~c);
        //printf可以格式化输出内容，%x表示按照十六进制输出，0x前缀的数字为十六进制数字，~按位取反
        System.out.println();
        System.out.println(c);
    }
    public static void main11(String[] args) {
        int a=1;
        int b=2;
        System.out.println(a<b||10/0==0);
        System.out.println(!true);
        System.out.println(!false);
    }
    public static void main10(String[] args) {
        System.out.println(10>20&10/0==0);//用于证明&不支持短路求值
        System.out.println(10<20|10/0==0);//用于证明|不支持短路求值
    }
    public static void main9(String[] args) {
        System.out.println(10>20&&10/0==0);
        System.out.println(10<20||10/0==0);
        System.out.println(10>20&10==10);
        System.out.println(10>20|10==10);
    }
    public static void main8(String[] args) {
        int a=1;
        int b=2;
        System.out.println(a>b&&10/0==0);//证明&&的短路效果，前一个为false则结果为false
        System.out.println(a<b||10/0==0);//证明||的短路效果，前一个为true则结果为true
    }
    public static void main7(String[] args) {
        int a=1;
        int b=2;
        System.out.println(a>b||a==1);
        System.out.println(a<b||a==1);
        System.out.println(a<b||a==2);
        System.out.println(a>b||a==2);

    }
    public static void main6(String[] args) {
        int a=10;
        int b=20;
        System.out.println(a==b);//false
        System.out.println(a!=b);//true
        System.out.println(a<b);//true
        System.out.println(a>b);//false
        System.out.println(a<=b);//true
        System.out.println(a>=b);//false
        //System.out.println(a<15<b);//true<b err
        System.out.println(a>b&&a==10);
        //System.out.println(a=b);
        System.out.println(a>b||a==10);

    }
    public static void main5(String[] args) {
        int a=10;
        int b=++a;//a=11;b=11  先自增后赋值
        int c=10;
        int d=c++;//先赋值后自增
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
    }
    public static void main4(String[] args) {
        System.out.println(Short.MAX_VALUE);
        System.out.println(Short.MIN_VALUE);
        //byte a=130;
        //float b=3.5;
    }
    public static void main3(String[] args) {
        int a=1;
        a+=2;
        a-=1;
        a*=3;
        a/=2;
        System.out.println(a);
        int c=10;
        long d=20;
        //c=c+d;//右边运算时会整形提升，不能用int 类型接收double类型
        c+=d;
        System.out.println(c);//运算时会自动将低类型转为高类型，平时很难察觉
    }
    public static void main2(String[] args) {
        System.out.println(11.5%2);
        System.out.println(11.5%2.0);
    }
    public static void main1(String[] args) {
        System.out.println(10%3);
        System.out.println(-10%3);
        System.out.println(12.5%2.0);
        System.out.println(12.5/2);
        System.out.println(12.5%2);
        int a=3;
        int b=2;
        System.out.println(a/b);
        System.out.println(a*1.0/b);
        System.out.println(a/b*1.0);
        int c=0;
        //System.out.println(a/c);
        System.out.println(1+0.2);
    }
}
